
#include "config.h"
#include "video_manager.h"
#include <string.h>

static PT_VideoOpr g_ptVideoOprHead = NULL;    /* Video设备操作结构体链表头*/

/*
 * @description		    : 向框架注册一个Video设备操作结构体
 * @param - ptDebugOpr 	: 需要注册的Video设备操作结构体指针
 * @return 			    : 0 成功;其他 失败
 */
int RegisterVideoOpr(PT_VideoOpr ptVideoOpr)
{
	PT_VideoOpr ptTmp;

	if (!g_ptVideoOprHead)
	{
		g_ptVideoOprHead   = ptVideoOpr;
		ptVideoOpr->ptNext = NULL;
	}
	else
	{
		ptTmp = g_ptVideoOprHead;
		while (ptTmp->ptNext)
		{
			ptTmp = ptTmp->ptNext;
		}
		ptTmp->ptNext     = ptVideoOpr;
		ptVideoOpr->ptNext = NULL;
	}

	return 0;
}
/*
 * @description		    : 打印所有Video设备名称
 * @param - ptDebugOpr 	: 无
 * @return 			    : 无
 */
void ShowVideoOpr(void)
{
	int i = 0;
	PT_VideoOpr ptTmp = g_ptVideoOprHead;

	while (ptTmp)
	{
		printf("%02d %s\n", i++, ptTmp->name);
		ptTmp = ptTmp->ptNext;
	}
}
/*
 * @description		    : 依据名称得到对应Video设备操作结构体指针
 * @param - pcName   	: Video设备名称
 * @return 			    : 成功 Video设备操作结构体指针;失败 NULL
 */
PT_VideoOpr GetVideoOpr(char *pcName)
{
	PT_VideoOpr ptTmp = g_ptVideoOprHead;
	
	while (ptTmp)
	{
		if (strcmp(ptTmp->name, pcName) == 0)
		{
			return ptTmp;
		}
		ptTmp = ptTmp->ptNext;
	}
	return NULL;
}
/*
 * @description		       : 初始化Video设备
 * @param - strDevName     : 设备节点
 * @param - ptVideoDevice  : 设备描述结构体
 * @return 			       : 0 成功;其他 失败
 */
int VideoDeviceInit(char *strDevName, PT_VideoDevice ptVideoDevice)
{
    int iError;
	PT_VideoOpr ptTmp = g_ptVideoOprHead;
	
	while (ptTmp)
	{
        iError = ptTmp->InitDevice(strDevName, ptVideoDevice);
        if (!iError)
        {
            return 0;
        }
		ptTmp = ptTmp->ptNext;
	}
    return -1;
}
/*
 * @description		       : 初始化Video设备
 * @param -                : 无
 * @return 			       : 0 成功;其他 失败
 */
int VideoInit(void)
{
	int iError;

    iError = V4l2Init();

	return iError;
}



